package com.quectel.core.module.scheduling.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 *
 * @author ryan
 * @email ryan.ran@quectel.com
 * @date 2023/07/13 18:58
 */
@Data
@Schema
public class SchedulingAttendanceDailyTimeDto implements Serializable {

    /**
    * id
    */
    @Schema(description = "id")
    private Long id;

    /**
    * 考勤 id
    */
    @Schema(description = "考勤 id")
    private Long attendanceDailyId;

    /**
     * 人员id
     */
    @Schema(description = "人员id")
    private Long personId;

    /**
    * 名称
    */
    @Schema(description = "名称")
    private String name;

    /**
    * 最早开始签到时间
    */
    @Schema(description = "最早开始签到时间")
    private Date startSignTime;

    /**
    * 上班时间
    */
    @Schema(description = "上班时间")
    private Date workTime;

    /**
    * 迟到时间
    */
    @Schema(description = "迟到时间")
    private Date lateTime;

    /**
    * 记上班缺卡时间
    */
    @Schema(description = "记上班缺卡时间")
    private Date missingWorkTime;

    /**
    * 记下班缺卡时间
    */
    @Schema(description = "记下班缺卡时间")
    private Date missingClosingTime;

    /**
    * 记早退时间
    */
    @Schema(description = "记早退时间")
    private Date earlyLeaveTime;

    /**
    * 下班时间
    */
    @Schema(description = "下班时间")
    private Date closingTime;

    /**
    * 最晚签退时间
    */
    @Schema(description = "最晚签退时间")
    private Date endSignTime;

    /**
     * 休息时间段
     */
    @Schema(description = "休息时间段")
    private String restTimeJson;

    /**
    * 有效上班打卡时间
    */
    @Schema(description = "有效上班打卡时间")
    private Date checkWorkTime;

    /**
    * 上班打卡状态
    */
    @Schema(description = "上班打卡状态")
    private Byte checkWorkStatus;

    /**
    * 上班打卡是否外勤 0否 1 是
    */
    @Schema(description = "上班打卡是否外勤 0否 1 是")
    private Byte checkWorkIsField;

    /**
     * 上班打卡是否补卡 0否 1 是
     */
    @Schema(description = "上班打卡是否补卡 0否 1 是")
    private Byte checkWorkIsRepair;

    /**
     * 上班打卡经度
     */
    @Schema(description = "上班打卡经度")
    private Double checkWorkLongitude;

    /**
     * 上班打卡纬度
     */
    @Schema(description = "上班打卡纬度")
    private Double checkWorkLatitude;

    /**
     * 上班打卡地址
     */
    @Schema(description = "上班打卡地址")
    private String checkWorkAddress;

    /**
    * 上班打卡表单
    */
    @Schema(description = "上班打卡表单")
    private String checkWorkFieldJson;

    /**
    * 有效下班打卡时间
    */
    @Schema(description = "有效下班打卡时间")
    private Date checkClosingTime;

    /**
    * 下班打卡状态
    */
    @Schema(description = "下班打卡状态")
    private Byte checkClosingStatus;

    /**
    * 下班打卡是否外勤 0 否 1 是
    */
    @Schema(description = "下班打卡是否外勤 0 否 1 是")
    private Byte checkClosingIsField;

    /**
     * 下班打卡是否补卡 0否 1 是
     */
    @Schema(description = "下班打卡是否补卡 0否 1 是")
    private Byte checkClosingIsRepair;

    /**
     * 下班打卡经度
     */
    @Schema(description = "下班打卡经度")
    private Double checkClosingLongitude;

    /**
     * 下班打卡纬度
     */
    @Schema(description = "下班打卡纬度")
    private Double checkClosingLatitude;

    /**
     * 下班打卡地址
     */
    @Schema(description = "下班打卡地址")
    private String checkClosingAddress;

    /**
    * 下班打卡表单
    */
    @Schema(description = "下班打卡表单")
    private String checkClosingFieldJson;

    /**
     * 最新打卡时间
     */
    @Schema(description = "最新打卡时间")
    private Date lastCheckTime;

    /************非数据库字段 start ************/

    /************非数据库字段 end **************/

    @Data
    @Schema
    public static class FieldCheckDataCls implements Serializable {
        /**
         * 图片地址集合
         */
        @Schema(description = "图片地址集合")
        private String[] pics;

        /**
         * 备注
         */
        @Schema(description = "备注")
        private String remark;
    }

    @Data
    @Schema
    public static class RestTimeSlotCls implements Serializable {
        /**
         * 休息开始时间
         */
        @Schema(description = "休息开始时间")
        private Date restStartTime;

        /**
         * 休息结束时间
         */
        @Schema(description = "休息结束时间")
        private Date restEndTime;
    }
}
